/*
 * @Author: szx
 * @Date: 2022-04-09 15:47:30
 * @LastEditTime: 2022-04-09 16:14:33
 * @Description:
 * @FilePath: \leetcode\300-399\397\397.js
 */
/**
 * @param {number} n
 * @return {number}
 */
// var integerReplacement = function (n) {
//     let i = 1;
//     let res = 0;
//     if (1 > n && n & 1) {
//         n--;
//         res++;
//     }
//     while (i < n) {
//         if (n > 3 * i) {
//             i *= 2;
//             res++;
//             console.log(res)
//         } else if (2 * i < n && n <= 3 * i) {
//             return res + Math.floor(n / 2) - i + 1;
//         } else if (i < n && n <= 2 * i) {
//             return res - Math.floor(n / 2) + i + 1;
//         } else {
//             return n - i + res;
//         }
//     }
//     return res;
// };
var integerReplacement = function(n) {
    let ans = 0;
    while (n !== 1) {
        if (n % 2 === 0) {
            ++ans;
            n = Math.floor(n / 2);
        } else if (n % 4 === 1) {
            ans += 2;
            n = Math.floor(n / 2);
        } else {
            if (n === 3) {
                ans += 2;
                n = 1;
            } else {
                ans += 2;
                n = Math.floor(n / 2) + 1;
            }
        }
    }
    return ans;
};

console.log(integerReplacement(1234));
// console.log(integerReplacement(1));
// console.log(integerReplacement(8));
// console.log(integerReplacement(7));
// console.log(integerReplacement(4));
